/*
 * CNN.h
 *
 *  Created on: 2015-5-22
 *      Author: sagnitude
 */

#ifndef CNN_H_
#define CNN_H_

const int FrameSize = 16;

typedef struct MetaFrame {};

typedef struct Frame {
	MetaFrame metaFrames[FrameSize];
};

//dispatching: job assignment

/*
 * GPU Part
 */
//step 1: input dispatch
__global__ void INPUT(Frame* frames, int frameCount);

//step 2: convolution: (CONV -> RELU -> CONV -> RELU -> POOL) * 3
__global__ void CONVOLUTION(MetaFrame* frameDebris, int debrisCount);

__global__ void CONV(MetaFrame* frameDebris, int debrisCount);
__global__ void RELU(MetaFrame* frameDebris, int debrisCount);
__global__ void POOL(MetaFrame* frameDebris, int debrisCount);

//step 3: full connected -> convolution layer
__global__ void FC(MetaFrame* frameDebris, int debrisCount);

/*
 * CPU Part
 */
void MERGE(MetaFrame* frames);


#endif /* CNN_H_ */
